package com.baiku.sanhos.mapper;

import com.baiku.sanhos.controller.DeptController;
import com.baiku.sanhos.pojo.dto.DeptDTO;
import com.baiku.sanhos.pojo.entity.Dept;
import com.baiku.sanhos.pojo.entity.Doctor;
import com.baiku.sanhos.pojo.entity.DoctorAndDept;
import com.baiku.sanhos.pojo.vo.DeptVo;
import com.baiku.sanhos.pojo.vo.DoctorIndexVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface DeptMapper extends BaseMapper<Dept> {
    /**
     * 增：
     * 添加科室信息
     * @param dept 科室对象
     * @return 成功1
     */
    int insert(Dept dept);

    /**
     * 删：根据id删除特定行
     * @param ids
     */
    void deleteByIds(List<Integer> ids);

    /**
     * 查：查询所有科室信息
     * @return list集合
     */
    List<DeptVo> select();

    /**
     * 查：根据科室id查询科室信息
     * @param id 科室id
     * @return 科室信息对象
     */
    DeptVo selectById(Integer id);

    /**
     * 查：
     * 根据科室id删除科室信息
     * @param id 科室id
     * @return 返回1成功
     */
    int deleteById(Integer id);

    /**
     * 查：
     * 模糊查询科室
     * @param deptName 名称
     * @return 科室集合
     */
    List<DeptVo> selectByDeptName(String deptName);

    /**
     * 查：每个最高级的科室总共有多少人
     * @return
     */
    List<DoctorAndDept> selectDeptAndDoctorCount();

    /**
     *查：筛选出特定的部门id
     * @param deptname：部门名称
     * @return
     */
    int getTotalDepts(String deptname);

    /**
     *查：根据科室名称分页
     * @param pageSize：一页有几个记录
     * @param offset：偏移量
     * @param deptname：科室名称
     * @return
     */
    List<DeptVo> selectAll(int pageSize, int offset, String deptname);

    /**
     *查：查询部门信息（id不为2,3,5,6,7,8,9,20,21,22,24,25,26）
     * @return
     */
    List<DeptVo> selectDict();

    /**
     * 查：根据部门id列出医生列表
     * @param deptId：部门id
     * @return
     */
    List<Doctor> selectByDeptId(Integer deptId);

    /**
     * 查：获取医生总数和医生信息，医生预约状态
     * @param no
     * @param username 医生名字
     * @param deptId   部门id
     * @param status   医生状态（预约）
     * @return
     */
    int getTotalDoctors(String no, String nickName,Integer deptId,Integer status);

    /**
     * 根据科室名称查询科室id
     * @param deptName 科室名称
     * @return 科室id
     */
    int getDeptIdByDeptName(String deptName);

    /**
     *查：根据医生索引选择全部医生信息
     * @param pageSize
     * @param offset
     * @param no
     * @param username
     * @param deptId
     * @param status
     * @return
     */
    List<DoctorIndexVo> selectDoctorAll(int pageSize, int offset, String no, String nickName,Integer deptId,Integer status);

    /**
     * 查：查询医生状态
     * @param deptId
     * @return
     */
    List<DoctorIndexVo> selectStatus(Integer deptId);

    /**
     * 改：
     * 更改科室信息
     * @param dept 数据科室
     * @return 成功1
     */
    int update(Dept dept);

    /**
     * 改：更新部门表信息
     * @param deptDTO 部门dto类
     * @return
     */
    int updateByIdDept(DeptDTO deptDTO);

}
